#include "includes.h"
#include "MyQueue.H"

static u16 Pop_One(void* que)
{
	u16 t = 0;
	pQueue QuePtr = (pQueue)que;
	if(QuePtr->Count)
	{
		QuePtr->Count--;
		t = QuePtr->Buf[QuePtr->Buf_RdPtr++];
		
		if(QuePtr->Buf_RdPtr >= QuePtr->Size)
		    QuePtr->Buf_RdPtr = 0;
	
	}
	return t;	
}

static u16 Push_One(void* que ,u16 AD)
{
	u16 t = 0;
	pQueue QuePtr = (pQueue)que;
	
	t = QuePtr->Buf[QuePtr->Buf_WtPtr];
	QuePtr->Buf[QuePtr->Buf_WtPtr++] = AD;
	//if(QuePtr->Buf_WtPtr >= QuePtr->Circle_Num)
		//QuePtr->Buf_WtPtr = 0;
	if(QuePtr->Buf_WtPtr >= QuePtr->Size)
	    QuePtr->Buf_WtPtr = 0;
	/*    
	(QuePtr->Buf_WtPtr) %= (QuePtr->Size);
	*/
	if(QuePtr->Count >=QuePtr->Size)
		QuePtr->Count = QuePtr->Size;
	else 
		QuePtr->Count++;
	
	return t;
	
}
static u8 Empty(void* que)
{
	pQueue QuePtr = (pQueue)que;
	
	return QuePtr->Count;
}
static u8 Full(void* que)
{
	pQueue QuePtr = (pQueue)que;
	return ((QuePtr->Count)>=(QuePtr->Size));
}
void InitQueue(pQueue QuePtr,u16 size)
{
	//pQueue QuePtr = (pQueue)que;
	QuePtr->Pop   = Pop_One;
	QuePtr->Push  = Push_One;
	QuePtr->Empty = Empty;
	QuePtr->Full  = Full;
	QuePtr->Size  = size;
	QuePtr->Buf_WtPtr = QuePtr->Buf_RdPtr = QuePtr->Count = 0 ;
	//QuePtr->Circle_Num = 65535 - (65535%size);
}
